package com.redis.springbootredis.rabbitmq.simple;

import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * @author
 * @create 2020-11-03 20:13
 * 第一个消费者
 */
public class FirstConsumer {

    public static void main(String[] args) throws Exception {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置访问的ip地址
        connectionFactory.setHost("192.168.238.132");
        //设置虚拟主机(类似于redis的db)
        connectionFactory.setVirtualHost("ljw");
        //设置密码和账户
        connectionFactory.setUsername("guest");
        connectionFactory.setPassword("guest");
        //新建连接对象
        Connection connection = connectionFactory.newConnection();
        //创建连接信道(需要通信的话必须创建，类似于输送水的水管)
        Channel channel = connection.createChannel();
        //创建消费者
        /*
          String queue 队列名
          boolean autoAck
            手动确定：接收消息处理以后，手动编码回复服务器，服务器接收到回复确认后才会从队列中删除消息
            自动确定：只要消费者这边一进入消息处理的回调函数，服务器就会从队列中删除消息，如果执行过程中遇到异常，那么消息会丢失
          Consumer callback 处理消息的回调函数，接收消息以后执行处理的代码
        */
        channel.basicConsume("simpleQueue", true, new DefaultConsumer(channel) {

            /*
             String consumerTag 消费标记，就是一个编号
             Envelope envelope 信封，手动恢复时需要使用
             AMQP.BasicProperties properties  消费时的附加属性
             byte[] body 消费体
            */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                 //输出信息查看
                System.out.println("consumerTag---"+consumerTag);
                System.out.println("envelope---"+envelope);
                System.out.println("properties---"+properties);
                System.out.println("body---"+new String(body));
                System.out.println("消费成功");
            }
        });
    }
}
